#!/bin/bash

#############################################
# K8s 配置文件上传脚本
# 使用 SCP 将 k8s 目录上传到远程服务器
#############################################

set -e

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 脚本所在目录的父目录（项目根目录）
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
K8S_DIR="${PROJECT_ROOT}/k8s"

# 显示帮助信息
show_help() {
    cat << EOF
使用方法: 
    $0 [用户名] [服务器地址] [目标路径] [可选:端口]

参数说明:
    用户名          远程服务器的用户名 (例如: root, ubuntu)
    服务器地址      远程服务器的 IP 地址或域名 (例如: 192.168.1.100)
    目标路径        k8s 配置文件的目标路径 (例如: /home/deploy/k8s)
    端口           SSH 端口 (可选，默认: 22)

示例:
    # 使用默认端口 22
    $0 root 192.168.1.100 /home/deploy/k8s

    # 指定自定义端口
    $0 root 192.168.1.100 /home/deploy/k8s 2222

    # 使用环境变量（推荐生产环境）
    export REMOTE_USER=root
    export REMOTE_HOST=192.168.1.100
    export REMOTE_PATH=/home/deploy/k8s
    export SSH_PORT=22
    $0

环境变量:
    REMOTE_USER     远程用户名
    REMOTE_HOST     远程服务器地址
    REMOTE_PATH     目标路径
    SSH_PORT        SSH 端口 (默认: 22)

EOF
}

# 参数解析
if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
    show_help
    exit 0
fi

# 从参数或环境变量获取配置
REMOTE_USER="${1:-${REMOTE_USER}}"
REMOTE_HOST="${2:-${REMOTE_HOST}}"
REMOTE_PATH="${3:-${REMOTE_PATH}}"
SSH_PORT="${4:-${SSH_PORT:-22}}"

# 参数验证
if [[ -z "$REMOTE_USER" ]] || [[ -z "$REMOTE_HOST" ]] || [[ -z "$REMOTE_PATH" ]]; then
    echo -e "${RED}错误: 缺少必需参数${NC}"
    echo ""
    show_help
    exit 1
fi

# 检查 k8s 目录是否存在
if [[ ! -d "$K8S_DIR" ]]; then
    echo -e "${RED}错误: k8s 目录不存在: $K8S_DIR${NC}"
    echo -e "${YELLOW}提示: 请先创建 k8s 目录并添加配置文件${NC}"
    exit 1
fi

# 检查 k8s 目录是否为空
if [[ -z "$(ls -A "$K8S_DIR")" ]]; then
    echo -e "${YELLOW}警告: k8s 目录为空${NC}"
    read -p "是否继续上传? (y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "已取消上传"
        exit 0
    fi
fi

# 显示配置信息
echo -e "${GREEN}================================${NC}"
echo -e "${GREEN}K8s 配置上传${NC}"
echo -e "${GREEN}================================${NC}"
echo -e "本地目录:   ${YELLOW}$K8S_DIR${NC}"
echo -e "远程用户:   ${YELLOW}$REMOTE_USER${NC}"
echo -e "远程服务器: ${YELLOW}$REMOTE_HOST${NC}"
echo -e "远程路径:   ${YELLOW}$REMOTE_PATH${NC}"
echo -e "SSH 端口:   ${YELLOW}$SSH_PORT${NC}"
echo -e "${GREEN}================================${NC}"
echo ""

# 确认上传
read -p "确认上传? (y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "已取消上传"
    exit 0
fi

echo -e "${GREEN}开始上传...${NC}"

# 清空远程目录
echo -e "${YELLOW}步骤 1/3: 清理远程目录...${NC}"
ssh -p "$SSH_PORT" "${REMOTE_USER}@${REMOTE_HOST}" "if [ -d '${REMOTE_PATH}' ]; then rm -rf '${REMOTE_PATH}'; fi" || {
    echo -e "${RED}错误: 无法清理远程目录${NC}"
    exit 1
}

# 在远程服务器上创建目标目录
echo -e "${YELLOW}步骤 2/3: 创建远程目录...${NC}"
ssh -p "$SSH_PORT" "${REMOTE_USER}@${REMOTE_HOST}" "mkdir -p '${REMOTE_PATH}'" || {
    echo -e "${RED}错误: 无法在远程服务器创建目录${NC}"
    exit 1
}

# 使用 scp 上传整个 k8s 目录
echo -e "${YELLOW}步骤 3/3: 上传 k8s 配置文件...${NC}"
scp -P "$SSH_PORT" -r "${K8S_DIR}"/* "${REMOTE_USER}@${REMOTE_HOST}:'${REMOTE_PATH}/'" || {
    echo -e "${RED}错误: 文件上传失败${NC}"
    exit 1
}

echo ""
echo -e "${GREEN}✓ 上传完成!${NC}"
echo ""
echo -e "${GREEN}后续步骤:${NC}"
echo -e "  1. SSH 登录到远程服务器:"
echo -e "     ${YELLOW}ssh -p $SSH_PORT ${REMOTE_USER}@${REMOTE_HOST}${NC}"
echo ""
echo -e "  2. 应用 k8s 配置:"
echo -e "     ${YELLOW}kubectl apply -f ${REMOTE_PATH}/${NC}"
echo ""
echo -e "  3. 查看部署状态:"
echo -e "     ${YELLOW}kubectl get pods -n go-pan${NC}"
echo ""

